package com.spring.boot.rabbit.configure.rabbit;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import static com.spring.boot.rabbit.constant.ExchangeConst.DIRECT_EXCHANGE;
import static com.spring.boot.rabbit.constant.QueueConstant.*;
import static com.spring.boot.rabbit.constant.RoutingKey.TRADING_DEAD_LETTER;

/**
 * RabbitMQ-消息队列配置类
 *
 * @author 李坤
 * @date 2022/9/1 11:19
 */
@Configuration
public class QueueConfigure {

    /**
     * 队列默认消息个数
     */
    private final int DEFAULT_MAX_LENGTH = 100;
    /**
     * 默认的消息超时时间
     */
    private final int DEFAULT_TTL = 10 * 60 * 1000;

    /**
     * 默认的消息队列，持久化处理
     *
     * @return 默认的消息队列
     */
    @Bean
    public Queue defaultQueue() {
        // ttl：消息存活时长；maxLength：消息队列长度
        return QueueBuilder.nonDurable(DEFAULT_QUEUE).ttl(DEFAULT_TTL).maxLength(DEFAULT_MAX_LENGTH)
                .deadLetterExchange(DIRECT_EXCHANGE).deadLetterRoutingKey(TRADING_DEAD_LETTER).lazy().build();
    }

    /**
     * 默认的死信队列，持久化处理
     *
     * @return 默认的消息队列
     */
    @Bean
    public Queue defaultDeadLetterQueue() {
        // ttl：消息存活时长；maxLength：消息队列长度
        return QueueBuilder.nonDurable(DEFAULT_DEAD_LETTER_QUEUE).lazy().build();
    }

    /**
     * 次级的Topic类型队列
     *
     * @return 消息队列
     */
    @Bean
    public Queue topicQueueSecondary() {
        return QueueBuilder.nonDurable(TOPIC_QUEUE_SECONDARY).ttl(DEFAULT_TTL).maxLength(DEFAULT_MAX_LENGTH).lazy().build();
    }

}
